dynamic

Доступность

Flash Player 6.

Синтаксис

dynamic class className  [ extends superClass ] 
              [ implements interfaceName [, interfaceName... ] ]
{
  // здесь располагается определение класса
}

Замечание: Для использования этого ключевого слова вы должны указать ActionScript 2.0 и Flash Player 6 или более новые во вкладке Flash диалогового окна Publish Settings вашего FLA-файла. Это ключевое слово поддерживается только в случае использования во внешних скриптовых файлах, а не в скриптах, написанных в панели Actions.

Описание

Ключевое слово; указывает, что к объектам, основанным на указанном классе, можно добавлять динамические свойства и иметь к ним доступ во время работы программы.

Контроль типов для динамических классов менее строг, чем для нединамических, потому что доступ к членам класса происходит внутри определения класса и на экземплярах класса не производится сравнения с определением в области действия класса. Функции - члены класса, однако, могут все-таки быть проверены контролем типов на тип возвращаемого значения и типы параметров. Это поведение особенно полезно, когда вы работаете с объектами MovieClip, потому что имеется много различных путей динамического добавления к мувиклипу свойств и объектов, таких как MovieClip.createEmptyMovieClip() и MovieClip.createTextField().

Подклассы динамических классов также являются динамическими.

Для дополнительной информации смотрите "Создание динамических классов" в Использовании ActionScript во Flash.

Пример

В следующем примере класс Person2 еще не помечен как динамический и поэтому вызов необъявленной в нем функции вызывает ошибку на стадии компиляции:

class Person2 {
  var name:String;
  var age:Number;
  function Person2(param_name:String, param_age:Number) {
    trace ("anything");
    this.name = param_name;
    this.age = param_age;
  }
}

Во FLA или AS файле, который находится в той же папке, добавим следующий скрипт в кадре 1:

// До добавления dynamic
var craig:Person2 = new Person2("Craiggers", 32);
for (i in craig) {
  trace("craig."+i +" = "+ craig[i]);
}
/* в окне output:
  craig.age = 32
  craig.name = Craiggers
*/

Если вы добавите необъявленную функцию dance, то это вызовет ошибку, как показано далее в примере:

trace("");
craig.dance = true;
for (i in craig) {
  trace("craig."+i +" = "+ craig[i]);
}
/* в окне output:
  **Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 14: There is no property with the name 'dance'.
     craig.dance = true;
  
  Total ActionScript Errors: 1    Reported Errors: 1
*/

Добавим ключевое слово dynamic в классе Person2, тогда первая строка будет выглядеть так:

dynamic class Person2 {

Запустив код снова, вы увидите в окне output следующее:

craig.dance = true
craig.age = 32
craig.name = Craiggers

См. также

class, extends